/**
 * 
 */
package com.imooc.security.core.social.qq.connet;

import org.springframework.social.oauth2.AbstractOAuth2ServiceProvider;

import com.imooc.security.core.social.qq.api.QQ;
import com.imooc.security.core.social.qq.api.QQImpl;

/**
 *  url 去申请授权码
 *  拿到授权码后，通过授权码去申请token  授权码 ---> token  是服务器内部实现跳转的，
 *
 * 	QQServiceProvider主要是获取令牌
 *
 * @author zhailiang
 *	https://graph.qq.com/oauth2.0/authorize?	response_type=token	&	client_id=[YOUR_APPID]	&	redirect_uri=[YOUR_REDIRECT_URI]	&	scope=[THE_SCOPE]
 *	String clientId, String clientSecret, String authorizeUrl, String accessTokenUrl
 */
/**
 * Step1：获取Authorization Code

 	请求地址：

 	PC网站：https://graph.qq.com/oauth2.0/authorize
 */

/**
 * Step2：通过Authorization Code获取Access Token
 * https://graph.qq.com/oauth2.0/token
 * 	grant_type 	必须 	授权类型，在本步骤中，此值为“authorization_code”。
 	client_id 	必须 	申请QQ登录成功后，分配给网站的appid。
 	client_secret 	必须 	申请QQ登录成功后，分配给网站的appkey。
 	code 	必须 	上一步返回的authorization code。

 	如果用户成功登录并授权，则会跳转到指定的回调地址，并在URL中带上Authorization Code。

 	例如，回调地址为www.qq.com/my.php，则跳转到：

 	http://www.qq.com/my.php?code=520DD95263C1CFEA087******

 	注意此code会在10分钟内过期。
 	redirect_uri 	必须
 */
public class QQServiceProvider extends AbstractOAuth2ServiceProvider<QQ> {

	private String appId;
	
	private static final String URL_AUTHORIZE = "https://graph.qq.com/oauth2.0/authorize";
	
	private static final String URL_ACCESS_TOKEN = "https://graph.qq.com/oauth2.0/token";

	/**
	 * 构造方法，需要 OAuth2Operations		{@link #QQOAuth2Template} 实现了 OAuth2Operations
	 * @param appId
	 * @param appSecret
	 */
	public QQServiceProvider(String appId, String appSecret) {
		super(new QQOAuth2Template(appId, appSecret, URL_AUTHORIZE, URL_ACCESS_TOKEN));
		this.appId = appId;
	}
	
	@Override
	public QQ getApi(String accessToken) {
		return new QQImpl(accessToken, appId);
	}

}
